package com.nttdata.ta.todo.config;

import feign.Retryer;
import feign.Request;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * Feign客户端配置
 * 配置连接超时、读取超时和重试策略
 */
@Slf4j
@Configuration
public class FeignConfig {
    
    /**
     * 配置Feign请求超时
     * - connectTimeout: 连接超时时间，这里设置为1秒
     * - readTimeout: 读取超时时间，这里设置为3秒
     */
    @Bean
    public Request.Options options() {
        log.info("配置Feign客户端超时参数: 连接超时=1秒, 读取超时=3秒");
        return new Request.Options(
            1, TimeUnit.SECONDS,  // connectTimeout
            3, TimeUnit.SECONDS,  // readTimeout
            true                 // followRedirects
        );
    }
    
    /**
     * 配置Feign重试策略
     * - period: 初始重试间隔（100毫秒）
     * - maxPeriod: 最大重试间隔（1秒）
     * - maxAttempts: 最大重试次数（2次，加上第一次请求共3次）
     */
    @Bean
    public Retryer retryer() {
        log.info("配置Feign客户端重试策略: 重试次数=2次, 初始间隔=100ms, 最大间隔=1秒");
        return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1), 2);
    }
} 